# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 3、自动化录制 及 测试用例结构分析.py
"""
import time

"""
Appium Inspctor 功能介绍
    UI分析
    录制用例
    元素查找测试
    Attcah 已有的 session
    云测试
    
用例脚本优化：
    添加 Capability 信息
    初始化 webdriver ，添加 setup 和 teardown 
    添加隐式等待 和 noReset 属性增加用例稳定性
    添加断言
    注意：
        selenium 版本建议 3.141.0
        appium-python-client 版本建议 1.2.0
"""

# 录制的代码    app 下载软件包 ： https://github.com/appium/tree/master/sample-code/apps

# 导包操作 ： pip install appium-python-client
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy


class TestAppDemo:
    def setup(self):
        # 创建一个字典
        caps = {}
        caps['platformName'] = 'Android'
        # 安卓 包名  获取命令 ： adb logcat ActivityManager:I | findstr "cmp"
        caps['appPackage'] = 'io.appium.android.apis'
        # 安卓 页面名
        caps['appActivity'] = '.ApiDemos'
        caps['deviceName'] = 'emulator-5554'
        caps['ensureWebviewsHavePages'] = True
        # 在当前 session 下不会重置应用的状态，默认为 false
        caps['noReset'] = 'true'

        # 创建 driver 与 appium server 建立链接。返回一个 session 对象
        # driver 变成 self.driver 由局部变量变成 实例变量。就可以在其他的方法中引用这个变量
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', caps)
        self.driver.implicitly_wait(5)

    def teardown(self):
        # 回收 session
        self.driver.quit()

    def test_input(self):
        ele1 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'OS')
        ele1.click()

        ele2 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'Morse Code')
        ele2.click()

        ele3 = self.driver.find_element(AppiumBy.ID, 'io.appium.android.apis:id/text')
        ele3.clear()
        ele3.send_keys('ceshiren.com')
        time.sleep(2)
        # 返回
        self.driver.back()
        self.driver.back()

        # 断言
        result = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'Accessibility').text
        assert result == 'Accessibility'
